home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1995-03-10 | 2.8 KB | 100 lines | [TEXT/3PRM] |
- implementation module windowAccess;
-
-
- import StdInt;
- import pointer, quickdraw, windows;
- import commonDef, ioState;
-
-
- :: DrawMode :== Int;
-
-
- DrawNoControls :== 0;
- HasControls :== 1;
- HasNoControls :== 2; // for FixedWindows
-
- ScrollBarWidth :== 15;
- TitleBarWidth :== 20;
- MenuBarWidth :== 20;
- WindowScreenBorder :== 4;
-
- WindowPtrNextWindow :== 144;
-
-
- // General rules:
-
- WindowAccessError :: String String -> .x;
- WindowAccessError f error = Error f "windowAccess" error;
-
- WindowSystemState_WindowHandles :: !(DeviceSystemState s) -> WindowHandles s;
- WindowSystemState_WindowHandles (WindowSystemState windows) = windows;
- WindowSystemState_WindowHandles _
- = WindowAccessError "WindowSystemState_WindowHandles" "argument is no WindowSystemState";
-
- Window_size :: !WindowPtr !Toolbox -> (!Point, !Toolbox);
- Window_size wPtr tb
- = ((right - left,bottom - top), tb4);
- where {
- (top, tb1) = LoadWord (wPtr + 16) tb;
- (left, tb2) = LoadWord (wPtr + 18) tb1;
- (bottom,tb3) = LoadWord (wPtr + 20) tb2;
- (right, tb4) = LoadWord (wPtr + 22) tb3;
- };
-
- WindowGetFrameSize :: !(WindowHandle s) !Toolbox -> (!Point, !Toolbox);
- WindowGetFrameSize (wDef, (wPtr,_,_,_,_,_)) tb
- | IsScrollWindow wDef = ((w-ScrollBarWidth, h-ScrollBarWidth), tb1);
- = (size, tb1);
- where {
- (w, h) = size;
- (size, tb1) = Window_size wPtr tb;
- };
-
-
- UpdateDrawMode :: !(WindowDef s (IOState s)) -> DrawMode;
- UpdateDrawMode wDef
- | IsScrollWindow wDef = HasControls;
- = HasNoControls;
-
- WindowDefGetDrawMode :: !(WindowDef s (IOState s)) -> DrawMode;
- WindowDefGetDrawMode wDef
- | IsScrollWindow wDef = DrawNoControls;
- = HasNoControls;
-
-
- // Common access rules:
-
- WindowGetPtr :: !Window -> WindowPtr;
- WindowGetPtr (wPtr,_,_,_,_,_) = wPtr;
-
- WindowHandleGetPtr :: !(WindowHandle s) -> WindowPtr;
- WindowHandleGetPtr (_, window) = WindowGetPtr window;
-
- DummyWindowHandle :: WindowPtr -> WindowHandle s;
- DummyWindowHandle wPtr
- = (dummyWindowDef, dummyWindow);
- where {
- dummyWindowDef = FixedWindow 0 p "" (p,p) dummyUpdF [];
- dummyWindow = (wPtr, (0,0,0), (0,0,0), 0, [], (0,0));
- p = (0,0);
-
- dummyUpdF :: UpdateArea *s -> (*s, [DrawFunction]);
- dummyUpdF _ s = (s, []);
- };
-
-
- ChangeAllWindowPtrs :: !(WindowPtr -> Toolbox -> Toolbox) !(IOState s) -> IOState s;
- ChangeAllWindowPtrs f ioState
- = IOStateChangeToolbox (ChangeWindowPtrs f wHs) ioState1;
- where {
- (windows, ioState1) = IOStateGetDevice ioState WindowDevice;
- (wHs,_) = WindowSystemState_WindowHandles windows;
- };
-
- ChangeWindowPtrs :: !(WindowPtr -> Toolbox -> Toolbox) ![WindowHandle s] !Toolbox -> Toolbox;
- ChangeWindowPtrs f [wH : wHs] tb = ChangeWindowPtrs f wHs (f (WindowHandleGetPtr wH) tb);
- ChangeWindowPtrs _ _ tb = tb;
-
- CloseWindow :: !(IOState s) -> IOState s;
- CloseWindow ioState = IOStateRemoveDevice (ChangeAllWindowPtrs DisposeWindow ioState) WindowDevice;
-